/**
 * This is the base class for {@link Ext.ux.event.Recorder} and
 * {@link Ext.ux.event.Player}.
 */
Ext.define('Ext.ux.event.Driver', {
			active : null,
			mixins : {
				observable : 'Ext.util.Observable'
			},

			constructor : function(config) {
				var me = this;

				me.mixins.observable.constructor.apply(this, arguments);

				me.addEvents(
						/**
						 * @event start Fires when this object is started.
						 * @param {Ext.ux.event.Driver}
						 *            this
						 */
						'start',

						/**
						 * @event stop Fires when this object is stopped.
						 * @param {Ext.ux.event.Driver}
						 *            this
						 */
						'stop');
			},

			getTime : function() {
				return new Date().getTime();
			},

			/**
			 * Returns the number of milliseconds since start was called.
			 */
			getTimestamp : function() {
				var d = this.getTime();
				return d - this.startTime;
			},

			onStart : function() {
			},

			onStop : function() {
			},

			/**
			 * Starts this object. If this object is already started, nothing
			 * happens.
			 */
			start : function() {
				var me = this;

				if (!me.active) {
					me.active = new Date();
					me.startTime = me.getTime();
					me.onStart();
					me.fireEvent('start', me);
				}
			},

			/**
			 * Stops this object. If this object is not started, nothing
			 * happens.
			 */
			stop : function() {
				var me = this;

				if (me.active) {
					me.active = null;
					me.onStop();
					me.fireEvent('stop', me);
				}
			}
		});
